#include"BlockQueue.hpp"

using namespace BlockQueuemode;


void* run2(void* args)//消费者
{
    BlockQueue<int>* bp = static_cast<BlockQueue<int>*>(args);
    while(true)
    {
        sleep(2);
        int data;
        //1.从bp拿数据
        bp->Pop(&data);
        //2.对数据做处理
        printf("当前消费者消费了一个数据:%d\n",data);
    }
}

void* run1(void* args)//生产者
{
    BlockQueue<int>* bp = static_cast<BlockQueue<int>*>(args);
    int data = 10;
    while(true) 
    {
        sleep(2);

        //1.从外部获取数据
        //data = 10;//数据

        //2.生产到bp中
        bp->Equeue(data);//入队列
        printf("生产了一个数据：%d\n",data); 
        data++; 
    }
}

//要让不同的线程看到同一份阻塞队列
int main()
{
    //交易场所，不仅仅可以用来传递任务
    //还可以传递任务
    BlockQueue<int> *bp = new BlockQueue<int>(5);//也就是共享资源，2个线程同时访问不就乱了吗，所以要变成临界资源

   //单生产，单消费 
   pthread_t t1,t2;
   //将bp阻塞队列传给它们，就可以看到同一份阻塞队列了
   pthread_create(&t1,nullptr,run1,bp);//生产者
   pthread_create(&t2,nullptr,run2,bp);//消费者
 
   pthread_join(t1,nullptr);
   pthread_join(t2,nullptr);

   return 0;
}